#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
//全局变量
int plane_x,plane_y;//飞机位置
int high,width;//游戏画面尺寸 
int bullet_x, bullet_y;//子弹位置 
int enermy_x,enermy_y;//敌机位置 
int score;//分数设置 
int level;//等级设置 
 




int gotoxy(int x,int y)//光标移动到（x，y） 位置 
{
	HANDLE handle = GetStdHandle (STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition (handle, pos);
} 





int hide()//隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
} 





int starup()//游戏初始化 
{
	high=18;
	width=30;

	plane_x=high/2;
	plane_y=width/2;
	
	bullet_y=plane_y;
	bullet_x=-1; 
	
	enermy_y=width/2;
	enermy_x=0;
	
	score=0;
}





int show()//游戏显示
{	

	
	gotoxy(0,0);//清屏 
	int i,j;
	for(i=0;i<=high;i++)
	{
		for(j=0;j<=width;j++)
		{
			if((i==plane_x)&&(j==plane_y))
				printf("*");			//显示飞机		
			else if((i==plane_x+1)&&(j==plane_y+1))
				printf("*");		
			else if((i==plane_x+1)&&(j==plane_y-1))
				printf("*");
			else if((i==plane_x+2)&&(j==plane_y-1))
				printf("*");
			else if((i==plane_x+2)&&(j==plane_y+1))
				printf("*");
			else if((i==plane_x+3)&&(j==plane_y-1))
				printf("*");
			else if((i==plane_x+3)&&(j==plane_y+1))
				printf("*");
		 	else if((i==0)||(i==high))//输出边框 
				printf("-");
			else if((j==0)||(j==width))
				printf("|");
			else if((i==bullet_x)&&(j==bullet_y))
				printf("|");//显示子弹
			else if((i==enermy_x)&&(j==enermy_y))
				printf("@");//显示敌机 
			else
				printf(" ");//显示空格 
		}
		printf("\n");
	}
	printf("得分=%d\n",score);	
	printf("等级：%d",level) ;
}





int updataWithoutInput()//用户无关设置
{	
	if((bullet_x==enermy_x)&&(bullet_y==enermy_y))
	{
		score++;
		enermy_x=0;
		enermy_y=rand()%width;
		bullet_x=-1;
	}
	
	
	static int speed=0;//用于控制飞机下落速度 
	if(score<=5){		//增加游戏难度：没过五分敌机下落速度会有一个增加的效果 
		level=1; 
		if(speed<10)
		speed++;
		
		if(bullet_x>-1)
		bullet_x--;
		
		if(enermy_x>high)
		{
			enermy_x=0;
			enermy_y=rand()%width;
		}
		else
		{
			if(speed==10)
			{
				enermy_x++;	
				speed=0;
			}
		} 
		}
		if(score>5&&score<=10)
		{	
			level=2; 
			static int speed=0;
			if(speed<10)
			speed=speed+2;
		
			if(bullet_x>-1)
			bullet_x--;
		
			if(enermy_x>high)
		{
			enermy_x=0;
			enermy_y=rand()%width;
		}
		else
		{
			if(speed==10)
			{
				enermy_x++;	
				speed=0;
			}
		}
	}
		if(score>10)
		{
			level=3; 
			static int speed=0;
			if(speed<10)
			speed=speed+5;
		
			if	(bullet_x>-1)
				bullet_x--;

			if(enermy_x>high)
		{
			enermy_x=0;
			enermy_y=rand()%width;
		}
		else
		{
			if(speed==10)
			{
				enermy_x++;	
				speed=0;
			}
		}
		}

}





int updataWithInput()//用户有关设置
{
	char input;
	if(plane_x>=high||plane_y>=width||plane_x==0||plane_y==0)
	{
		printf("\a");
		printf("You are dead!!!");
		system("pause");
	} 
	if(kbhit())//当按下键时执行
	{
		input=getch();
		if(input=='a')
			plane_y--;
		if(input=='d')
			plane_y++;
		if(input=='w')
			plane_x--;
		if(input=='s')
			plane_x++;
		if(input==' ')
		{
			bullet_x=plane_x-1;
			bullet_y=plane_y;
		}
		if(input==27)
		{
			system("pause");
		} 
	} 
}





int main()
{
	hide(); 
	starup();//数据初始化
	while(1)//游戏循环 
	{
		show();//游戏显示 
		updataWithoutInput();//用户无关设置 
		updataWithInput(); //用户有关设置 
	} 
	return 0; 
} 
